Этюд 1.
Решение алгебраических систем

1.1. Синее и черное, или Задача Удодова

Рис. 1.1. Задача о купце и сукне: решение Удодова-отца I

Рис. 1.2. Экран дисплея при работе в среде Mathcad 8 Pro

Рис. 1.3. Панели математических инструментов Mathcad 8 Pro

Рис. 1.4. Задача о купце и сукне: решение Удодова-отца II

Рис. 1.5. Задача о купце и сукне: решение Удодова-отца III

Рис. 1.6. Задача о купце и сукне: решение Пети

Рис. 1.7. Задача о купце и сукне: решение Зиберова

Рис. 1.8. Новые возможности решения систем алгебраических уравнений в среде Mathcad 8

Рис. 1.9. Задача о гусях

Рис. 1.10. Задача об иномарке

Рис. 1.11. Поиск корней полинома

1.2. Задача о балке, или Вариации на тему русской пословицы

Рис. 1.12. Схема балки

Рис. 1.13. Мастер размерностей Mathcad

Рис. 1.14. Римейк задачи о купце и сукне

Рис. 1.15. Задача о балке: решение I

Рис. 1.16. Задача о балке: решение II

1.3. Великолепная семерка Mathcad

Рис. 1.17. Декартов график (X-Y Plot)

Рис. 1.18. Параметрический декартов график (продолжение рис. 1.17)

Рис. 1.19. Полярный график (Polar Plot – продолжение рис. 1.17)

Рис. 1.20. Мастер трехмерных диаграмм Mathcad 8

Рис. 1.21. График поверхности (Surface Plot – продолжение рис. 1.20)

Рис. 1.22. Карта линий уровня (Contour Plot – продолжение рис. 1.20)

Рис. 1.23. Векторное поле (Vector Field Plot – продолжение рис. 1.20)

Рис. 1.24. Трехмерный точечный график (3D Scatter Plot)

Рис. 1.25. Трехмерная столбчатая диаграмма (3D Bar Chart)

Рис. 1.26. Лупа (Zoom) графиков

Рис. 1.27. Трассировка (Trace) графиков

1.4. Операторы и функции

Рис. 1.28. Мастер функций Mathcad

Рис. 1.29. Операторы и функции

Рис. 1.30. Работа текстовых функций

1.1. Синее и черное, или Задача Удодова

Марков снял сапоги и, вздохнув, лег на диван.

Ему хотелось спать, но, как только он закрывал глаза, желание спать моментально проходило. Марков открывал глаза и тянулся рукой за книгой. Но сон опять налетал на него, и, не дотянувшись до книги, Марков ложился и снова закрывал глаза. Но лишь только глаза закрывались, сон улетал опять, и сознание становилось таким ясным, что Марков мог в уме решать алгебраические задачи на уравнения с двумя неизвестными.

Даниил Хармс. «Сон дразнит человека»

Система алгебраических уравнений с двумя неизвестными для многих литераторов является вершиной математической премудрости. Вот еще одна цитата, дополняющая эпиграф первого этюда книги, – беседа чеховских персонажей: отставного губернского секретаря Удодова, его сына Пети и горе-репетитора Егора Зиберова, ученика VII класса гимназии:

Теперь по арифметике... Берите доску. Какая следующая задача?

Петя плюет на доску и стирает рукавом. Учитель берет задачник и диктует:

– «Купец купил 138 арш. черного и синего сукна за 540 руб. Спрашивается, сколько аршин купил он того и другого, если синее стоило 5 руб. за аршин, а черное 3 руб.?» Повторите задачу.

Петя повторяет задачу и тотчас же, ни слова не говоря, начинает делить 540 на 138.

– Для чего же вы это делите? Постойте! Впрочем, так... продолжайте. Остаток получается? Здесь не может быть остатка. Дайте-ка я разделю!

Зиберов делит, получает 3 с остатком и быстро стирает.

«Странно... – думает он, ероша волосы и краснея. – Как же она решается? Гм!.. Это задача на неопределенные уравнения, а вовсе не арифметическая...»

Учитель глядит в ответы и видит 75 и 63.

«Гм!.. странно... Сложить 5 и 3, а потом делить 540 на 8? Так, что ли? Нет, не то».

– Решайте же! – говорит он Пете.

– Ну, чего думаешь? Задача-то ведь пустяковая! – говорит Удодов Пете. – Экий ты дурак, братец! Решите уж вы ему, Егор Алексеич.

Егор Алексеич берет в руки грифель и начинает решать. Он заикается, краснеет, бледнеет.

– Это задача, собственно говоря, алгебраическая, – говорит он. – Ее с иксом и игреком решить можно. Впрочем, можно и так решить. Я, вот, разделил... понимаете? Теперь, вот, надо вычесть... понимаете? Или, вот что... Решите мне эту задачу сами к завтраму... Подумайте...

Петя ехидно улыбается. Удодов тоже улыбается. Оба они понимают замешательство учителя. Ученик VII класса еще пуще конфузится, встает и начинает ходить из угла в угол.

– И без алгебры решить можно, – говорит Удодов, протягивая руку к счетам и вздыхая. – Вот извольте видеть...

Он щелкает на счетах, и у него получается 75 и 63, что и нужно было.

– Вот-с... по-нашему, по-неученому.

Фрагмент из миниатюры А. П. Чехова «Репетитор» предварил наш рассказ о пакете Mathcad по трем причинам:

1. Описанная ситуация часто повторяется и сейчас. Только люди, решая задачи, стали протягивать руку не к счетам и даже не к калькулятору, а к персональному компьютеру. И самая подходящая на сегодняшний день программная среда для решения задач, подобных задаче Удодова, – это Mathcad.

2. Технология решения задач в среде Mathcad во многом похожа на подход Удодова-отца. Компьютеру достаточно сообщить условия задачи – и пусть себе решает, лишь бы ответ сошелся. О методах решения задач пользователь начинает задумываться, когда происходит осечка, что случается довольно редко, если иметь в виду не слишком сложные задачи (не суперзадачи, решение которых требует разработки специального матобеспечения).

3. И современная, и прошлого века – обратитесь еще раз к рассказу А. П. Чехова – методика преподавания школьной и вузовской математики, физики, химии и других предметов ориентирована, как правило, не на постановку задачи, а на решение уже кем-то сформулированных проблем. Компьютеризация школы (средней и высшей), базирующаяся на преподавании языков программирования (BASIC, Pascal, С и др.) в качестве основ информатики, ничего не меняет в этом не совсем нормальном положении вещей. Среды общения с ЭВМ на почти естественном для человека языке (и в то же время на математическом языке), к которым относится Mathcad, позволяют больше внимания уделять постановке проблемы, математическому моделированию реальных ситуаций, анализу ответа, а не методикам решения надуманных задач. К этому вопросу мы еще вернемся в этюде 7, когда речь пойдет о методике использования компьютеров на уроках математики – школьной и вузовской.

Но лучший способ оценить пакет Mathcad – это решить с его помощью задачу. А самый подходящий пример для начального знакомства с пакетом Mathcad – чеховская задача. Вот три отрывка из рассказа, определяющие три возможных подхода к решению:

1.      – И без алгебры решить можно, – говорит Удодов, протягивая руку к счетам и вздыхая. – Вот извольте видеть...

2.      Петя повторяет задачу и тотчас же, ни слова не говоря, начинает делить 540 на 138.

3.      – Это задача, собственно говоря, алгебраическая, – говорит он (Зиберов). – Ее с иксом и игреком решить можно.

Ниже читатель может увидеть эти три решения задачи о купце и сукне: Удодова-отца (рис. 1.1, 1.4 и 1.5), Петин (рис. 1.6) и Зиберовский (рис. 1.7), реализованные в среде Mathcad.

Рис. 1.1. Задача о купце и сукне: решение Удодова-отца I

Рассмотрим рис. 1.1, но сначала немного переиначим Чехова и покажем, как с помощью пакета Mathcad Удодов-отец решил бы задачу о купце и сукне. Внимание! Текст, принадлежащий Чехову, выделен курсивом.

– И без алгебры решить можно, – говорит Удодов, протягивая руку к компьютеру и вздыхая. – Вот извольте видеть протокол на рис. 1.1.

Он щелкает по клавиатуре компьютера и по мышке, и у него получается 63 и 75, что и нужно было.

– Вот-с... по-нашему, по-неученому.

Если у вас нет под рукой счет (русского калькулятора[1]), к коим Удодов-отец протянул руку, – не беда. Рабочее поле дисплея в среде Mathcad – прекрасный калькулятор: стоит только поставить в конце арифметического выражения знак «=», как машина тотчас и безошибочно выдаст результат вычислений.

Рис. 1.2. Экран дисплея при работе в среде Mathcad 8 Pro

Пустой Mathcad-документ – это волшебный лист бумаги, на котором пользователь с помощью клавиатуры и мыши может писать математические выражения в виде, принятом научным миром задолго до появления компьютера. В этом одна из причин популярности Mathcad.

Создать математические выражения помогают специальные панели (палитры) кнопок:

Рис. 1.3. Панели математических инструментов Mathcad 8 Pro

Нажав на кнопку «=» (пальцем на клавиатуре или мышкой на панели Arithmetic – см. рис. 1.3), пользователь получит на пустом месте экрана дисплея (в Mathcad-документе) заготовку оператора вывода числового значения.

█ = █ █

В левый пустой квадратик (placeholder, «держатель места») записывается выражение, численное значение которого появится во втором (среднем) квадратике, если увести курсор (автоматический режим расчета, включенный по умолчанию после запуска Mathcad, – см. слово AUTO внизу рис. 1.2) или нажать F9 (автоматический и/или ручной режимы). В правый квадратик можно записать нужную размерность, если обсчитывается какая-либо физическая величина. Если величина безразмерная, а пользователь все-таки вставит в правый квадрат букву m (метры), например, то Mathcad ругаться не будет, а превратит m в m × m-1, то есть в ничто. Как правило, показанной выше заготовки пользователь не видит, а просто нажимает «=» после набора математического выражения (см. рис. 1.1). Кнопка «=», повторяем, есть и на клавиатуре вверху справа. Нажимать можно и ее. Таким же образом продублированы и основные арифметические действия: сложение, вычитание, умножение, деление – на панели Arithmetic есть и цифры 1, 2, 3 и т.д. Считать в среде Mathcad можно, не касаясь клавиатуры, а только двигая мышку и щелкая по ее кнопкам.

Mathcad-документ на рис. 1.1 – это почти одни комментарии. Комментарии записываются в прямоугольную область, которую можно вставить в любом свободном месте Mathcad-документа: например, выше комментируемого выражения (рис. 1.1) левее или правее него (см. тексты BASIC-программ на рис. 1.7). Комментарии, как правило, имеют шрифт, отличный от шрифта переменных и констант[2]. Кроме того, на дисплее комментарии выделяются цветом. По умолчанию фон экрана белый, цвет выражений – черный, а цвет комментариев – синий. Но пользователь вправе поменять эту палитру, приспособив ее под свои особенности цветового восприятия. На рис. 1.1 белый фон только у областей комментариев и формул, остальное залито серым цветом. Это достигается переключателем Regions (регионы, области) в меню View (просмотр). Пользователям Mathcad, особенно начинающим, полезно работать в этом режиме, так как он позволяет четко фиксировать границы областей формул и комментариев. По умолчанию весь фон документа белый (белый лист бумаги!). Кроме того, на некоторых рисунках книги показаны панели, кнопки которых помогают создавать Mathcad-документ и решать поставленные задачи, а также другие ремарки автора и сообщения Mathcad.

По умолчанию, нажимая кнопки, пользователь вводит математические выражения (пишет черным по белому). Ввод комментария предваряется нажатием на клавишу «”» клавиатуры. Можно поступить и по-другому – набрать, например, букву С, а потом нажать на клавишу пробела: переменная С превратится в первую букву комментария (автоматически поменяет свой цвет с черного на синий, а шрифт – со шрифта переменных на шрифт комментариев).

Для вычислений можно использовать не только оператор «=», но и оператор «®» – оператор вывода не числового, а символьного значения. О нем подробно будет рассказано в этюде 7. Здесь же на рис. 1.4 показано, как оператор «®» позволяет имитировать (пока только имитировать – см. главку 1.2) размерности физических и финансовых величин.

Рис. 1.4. Задача о купце и сукне: решение Удодова-отца II

Сочетания арш и руб – это по своей сути имена переменных, которые в задаче на рис. 1.4 остаются пустыми и служат только для контроля размерности. Если на рис. 1.4 символ «®» заменить на «=», то Mathcad выдаст сообщение об ошибке: переменные арш и руб будут выделены красным цветом. До включения переменных в выражения им необходимо задать какое-либо числовое значение. Эту работу в среде Mathcad выполняют два оператора:

█ := █                                      º

Первый оператор появляется на экране дисплея после нажатия соответствующей кнопки «калькулятора» (см. левый нижний угол на панели Arithmetic рис. 1.3) или после нажатия клавиши «:» клавиатуры (второй символ – «=» Mathcad любезно добавит сам). Второй оператор – «º» хранит панель Evaluation. Кроме того, символ «º» можно напечатать, нажав клавишу «~».

В левом квадрате операторов присвоения указывается имя переменной[3] (или функции – см. раздел 1.4), а в правом – значение, которое ей присваивается. Оператор «:=» распространяет свое «влияние» вниз и вправо, а оператор «º» – на все четыре стороны. Эта особенность показана на рис. 1.5: там исходные данные максимально приближены к ответу. Если исходные данные перенести на их обычное место – в начало документа, то вместо оператора «º» можно будет использовать оператор «:=». Структура данных, показанная на рис. 1.5, удобна в объемных документах: пользователь меняет исходные данные и получает ответ без прокрутки самого документа. В «беспеременных» вариантах решения задачи о купце и сукне (рис. 1.1 и 1.4) исходные данные менять проблематично.

Еще одно отличие оператора «º» от оператора «:» – правый операнд оператора «º» может хранить системные переменные и константы (см. приложение 4), но не переменные, введенные пользователем:

Условно считается, что оператор «:=» служит для задания значений переменным, а оператор «º» – константам, то есть переменным, не меняющим свои значения в процессе решения задач.

В документе на рис. 1.4 – только текстовые поля; областей формул там нет. Формулы вставлены в концы текстовых полей (вопросов) командой Math Region меню Insert. Это очень удобно – формула и комментарий к ней составляют одно целое, которое не рвется при перемещении фрагмента документа на новое место.

Вот типичный фрагмент Mathcad-документа:


Здесь имеется три фрагмента: комментарий и два оператора – присваивание (переменные S и t определены где-то выше) и вычисление. Чтобы эти фрагменты не «разбежались» при редактировании Mathcad-документа, нужно поступить так – написать комментарий ({ – это пробел):

Расчет скорости{{{{{{

Затем в конец комментария и в середину цепочки пробелов вставить две области формул (Insert Math Region):

Расчет скорости{{{g{{{g

После этого в черные квадратики можно будет вставить операторы присваивания и вывода результата. Получается некий единый программный блок (о нем речь впереди ¾ в этюде 6), удобный вот еще чем: если в вышеописанном фрагменте расчета скорости оператор присваивания значения переменной V несколько приподнять, то нарушится причинно-следственная связь и появится сообщение об ошибке: «Переменная (функция) не определена». Эта ошибка неприятна своей непонятностью ¾ пользователь не знает, в чем дело, и начинает ползать по всему Mathcad-документу: «Ищу рукавицы, а они за поясом».

На рис. 1.4 переменные (арш и руб) были пустыми. На рис. 1.5 все переменные (Ч, С, СЧ, Сукно, Цена_Черного, Цена_Синего, Синее и Черное[4]) хранят конкретные числовые значения. На имена переменных накладываются некоторые ограничения. В частности, в них недопустимы пробелы (их можно ставить только в комментариях), которые обычно заменяют на символ подчеркивания. Сокращение имен (Ч, С и СЧ) оттеняет вспомогательность соответствующих переменных.

Рис. 1.5. Задача о купце и сукне: решение Удодова-отца III

А теперь рассмотрим второй (Петин) вариант решения задачи о купце и сукне из чеховского рассказа «Репетитор».

Петя повторяет задачу и тотчас же, ни слова не говоря, начинает делить 540 на 138.

Итак, Петя пытался поделить стоимость сукна на его «аршинаж» и вопреки протестам Зиберова был в чем-то прав: пакету Mathcad для решения системы алгебраических уравнений нужно сообщить первое, пусть даже «глупое» приближение. Все остальное он доделает сам, подчиняясь командам Given (дано) и Find (найти).

Рис. 1.6. Задача о купце и сукне: решение Пети

Mathcad не назывался бы математическим пакетом, если б не умел решать системы, тем более состоящие всего лишь из двух алгебраических уравнений (любимая задача литераторов ¾ см. начало этюда). Нужно только задать начальные значения переменных. Пусть они будут равны первому («глупому») Петиному предположению: 540 разделить на 138. За ключевым словом Given (дано) пользователь должен записать анализируемую систему[5], связывая левые и правые части уравнений знаком «эквивалентно»: жирным знаком «равно» из панели Evaluation (аккорд Ctrl + =). Решить записанную систему поможет встроенная функция Find (найти). Это немного странная функция – она возвращает свое значение, зависящее не только от значений ее аргументов (здесь переменные Синее и Черное), но и от того, что около данной функции написано. Это «около» распространяется вверх (или влево) от выражения, использующего функцию Find, до ключевого слова Given и даже дальше – до начального приближения. Функция Find возвращает и заносит в переменную Ответ (это не скаляр, а векторматрица с одним столбцом и двумя строками) значения переменных Синее и Черное, превращающие наши два уравнения в тождества. Значения, хранящиеся в векторе Ответ, можно вывести на дисплей, поставив после имени переменной «светлый» знак равно (оператор вывода числового значения). Числа 63 и 75 охвачены скобками, подчеркивающими, что переменная Ответ – это вектор, то есть группа скалярных величин[6], объединенных в «один кулак» и подчиняющихся общей дисциплине, описываемой в особом разделе математики под названием «линейная алгебра». В среде Mathcad есть богатый набор функций и операторов работы с векторами и матрицами (см. рис. 1.3 и приложения 3 и 4), позволяющий легко и изящно решать довольно сложные задачи.

В конце рис. 1.6 представлен и второй вариант вывода результата – не распечаткой значения вектора Ответ, а распечаткой значений элементов[7] вектора Ответ: переменных с индексом Ответ0 и Ответ1. По умолчанию в среде Mathcad первый элемент вектора имеет нулевой номер.

Термины вектор и матрица (массив), только что промелькнувшие в нашем повествовании, подсказывают третье – Зиберовское решение задачи о купце и сукне, отображенное на рис. 1.7.

Жан-Франсуа Шампольон открыл тайну египетских иероглифов с помощью Розетского камня, где один и тот же текст был высечен по-древнеегипетски и по-древнегречески. Билингва решения задачи Удодова (пункт 1 на рис. 1.7) поможет читателям, знающим язык BASIC, понять особенности и достоинства Mathcad. Решая задачу Удодова (см. рис. 1.1, 1.4, 1.6 и 1.7), мы познакомились с четырьмя операторами, давшими пакету Mathcad второе название – суперкалькулятор, с операторами присваивания «:=» или «º» и операторами вывода результата «=» или «®». Операторы вывода нередко называют операторами распечатки переменной или выражения, напоминая тем самым о его аналоге на языке BASIC – операторе Print. Рис. 1.7 покажет нам и другие аналоги операторов и функций Mathcad в языке BASIC (феномен Розетского камня).

Рис. 1.7. Задача о купце и сукне: решение Зиберова

Попытаемся, подражая Чехову, устами репетитора Зиберова растолковать ученику Пете «матричное» решение нашей задачи в среде Mathcad.

– Это задача, собственно говоря, алгебраическая, – говорит он. – Ее с иксом и игреком решить можно. Впрочем, можно и так решить (Внимание! Текст Чехова кончился). С одним иксом. Для этого перепишем задачу в матричном виде: A×X=B. Матрица A – это квадратная матрица порядка 2 (с двумя строками и двумя столбцами), хранящая коэффициенты при неизвестных системы двух линейных алгебраических уравнений, вектор X – вектор неизвестных системы, а вектор B – вектор свободных членов. Итак (см. рис. 1.7), я в среде Mathcad пишу A:. Машина приписала знак равно так, чтобы получился оператор присваивания («A:= g»), и ждет, какое значение я введу в переменную A. Ввожу я не число и не переменную, а матрицу, для чего нажимаю на кнопки с изображением матрицы на панелях инструментов Mathcad (Math и Matrix). После этого на экране дисплея возникает окно работы с матрицами Insert Matrix.

В этом окне два поля и четыре кнопки. В первом поле пользователь задает число строк (Rows) создаваемой матрицы, а во втором – число столбцов (Columns). По умолчанию в этих полях записаны тройки: считается, что квадратная матрица порядка 3 – самая распространенная. Но наша матрица А имеет порядок 2, поэтому тройки в полях окна работы с матрицами нужно заменить на двойки. На каждой из кнопок окна работы с матрицами есть надписи: OK (Создать матрицу и закрыть окно), Insert (Вставить), Delete (Удалить) и Canc el (отмена). Матрицу мы создаем, поэтому щелкаем по кнопке OK. Две остальные кнопки предназначены для изменения размеров ранее созданных матриц: заданное в полях число столбцов и/или строк вставляется (удаляется) правее и ниже отмеченного курсором элемента уже созданной матрицы.

После щелчка по кнопке OK справа от выражения А:= появляется каре четырех вакантных мест для ввода информации, обрамленное скобками. Заполняем вакансии числами 1, 1, 5 и 3 и приступаем к формированию вектора В. Набираем В:= и снова вызываем окно работы с матрицами[8]. Во втором поле меняем двойку на единицу, щелкаем по кнопке OK и получаем заготовку для ввода информации в вектор В. Заполняем вакантные места числами 138 («аршинаж» сукна) и 540 (его стоимость). Все! Матрица и вектор коэффициентов системы линейных алгебраических уравнений заполнены, значит основная работа сделана. Остается только найти решение системы и заполнить им матрицу X. Для этого инвертированную (обратную, возведенную в минус первую степень) матрицу A перемножаем на вектор B, а ответ заносим в вектор X. Если мы теперь введем с клавиатуры Х=, то машина выдаст нам ответ – числа 63 и 75 в скобках, что еще раз подчеркивает их матричный характер. (Внимание! Подражание Чехову закончилось).

Через окно Insert Matrix можно ввести матрицу, у которой число элементов не может превышать ста. Считается, что большее число элементов матрицы неразумно вводить вручную. Объемные матрицы вводятся в Mathcad-документ тремя способами:

1.      Элементы матрицы хранятся файлом на диске и вводятся в матрицу функцией READPRN.

2.      Две матрицы сливаются в одну функциями stack (матрицы ставятся одна на одну) или augment (матрицы ставятся бок о бок).

3.     

Двумя циклами формируется объемная вспомогательная матрица (M1), хранящая единицу или что-то другое, а потом ее содержимое копируется в создаваемую матрицу M и редактируется:

На рис. 1.7 правее Mathcad-выражений помещены комментарии, показывающие, как задача о купце и сукне решается с помощью языка BASIC, имеющего «матричные» операторы, начинающиеся с ключевого слова Mat. В языках программирования векторам и матрицам соответствуют массивы, хранящие переменные с индексом, которые подсказывают нам второй вариант «матричного» решения задачи о купце и сукне (пункт 2 на рис 1.7) без обращения к окну работы с матрицами, а через ввод индекса переменной: Аi , j, Bi и Хi. Индекс к имени переменной добавляется либо нажатием на кнопку Хn панели Matrix, либо на клавишу «[» (открывающаяся квадратная скобка). Запомнить эту клавишу просто: на языках Pascal и C в квадратные скобки помещаются индексы переменных A[i, j], B[i], Х[i] и т.д. Можно отметить еще одну особенность второго варианта «матричного» решения задачи Удодова: отказ от умножения инвертированной матрицы А на вектор В, а использование вместо этого встроенной функции lsolve, возвращающей решение (to solve – решать) системы линейных (l – эль) алгебраических уравнений.

В среде Mathcad 8 появились дополнительные возможности решения систем алгебраических уравнений конструкцией Given-Find, проиллюстрированные на рис. 1.8. Система уравнений, решаемая на рис. 1.8, имеет два корня, которые хорошо видны на графике (см. пункт 1, как он строится ¾ см. ниже главку «Великолепная семерка Mathcad»). Функция Find возвращает одно решение вблизи точки начального приближения. Но если начальное приближение дать не в виде скаляра, как на рис. 1.6, а в виде вектора (см. пункт 2 на рис. 1.8), то ответ будет содержать все корни системы. Элементы вектора Ответ ¾ уже не скалярные величины, а новые векторы.

Кроме того, в среде Mathcad 8 появилась возможность переменные системы алгебраических уравнений объединить в вектор. Этот прием проиллюстрирован в пункте 3 на рис. 1.8. В среде Mathcad 8 нет необходимости делать число уравнений большим или равным числу неизвестных системы.

Еще одно новшество Mathcad 8: если поместить курсор мыши на функцию Find и нажать правую кнопку мыши, то выпадает так называемое контекстное меню, в котором реализована возможность выбора метода решения системы алгебраических уравнений (см. конец рис. 1.8). Система Mathcad 8 по умолчанию сама выбирает метод решения (AutoSelect). Но пользователь при необходимости может скорректировать метод и детали расчета. В среде Mathcad 8 Pro можно решить систему, состоящую из 200 нелинейных алгебраических уравнений[9].

Рис. 1.8. Новые возможности решения систем алгебраических уравнений в среде Mathcad 8

Задачу о купце и сукне можно свести к решению одного алгебраического уравнения, получаемого подстановкой:

Черное = 138 – Синее

5 × Синее + 3 × (138 – Синее) = 540

Для поиска корня уравнения с одним неизвестным можно также использовать конструкцию Given-Find, принимая во внимание тот факт, что одиночное алгебраическое уравнение – это не что иное, как система из одного алгебраического уравнения.

На рис. 1.9. дано решение в среде Mathcad старинной русской загадки: «Летят гуси, а с земли их спрашивают: «Гуси, гуси, сколько вас?». Следует ответ: «Если нас будет столько, а потом полстолько, и еще четверть столько да еще два гуся, то нас будет ровно сто». Ответ – 56 гусей:

Рис. 1.9. Задача о гусях

Но для решения одиночных алгебраических уравнений лучше использовать не конструкцию Given-Find, а встроенную функцию root root, по-английски, корень).

Рис. 1.10. Задача об иномарке

На рис. 1.10 помещено решение римейка задачи о гусях – задачи об иномарке: «Спрашивают человека, сколько он отдал за подержанную иномарку, а он отвечает: «Я заплатил за нее столько. Но потом оказалось, что машина не прошла таможенную «очистку». Пришлось заплатить пошлину еще полстолько. Запчастей купил на четверть столько. Одну восьмую столько отдал автослесарям. Одну шестнадцатую столько пришлось выложить в ГАИ за техосмотр (не подмажешь – не поедешь в прямом смысле этого слова). Если сюда накинуть еще 120 долларов, получится цена новой машины ¾ 21 200 долларов». Спрашивается, сколько было заплачено за подержанную иномарку?»

Ответ дан на рис. 1.10 ¾ 10 880 долларов.

На рис. 1.10 для компактности сумма разорвана на две половинки, расположенные друг над другом.

Функция root имеет два аргумента: выражение и переменная, найденное значение которой делает выражение равным нулю. Для работы функции root также необходимо первое приближение, вблизи которого ищется корень. Если корней много, то возвращается один – ближайший к первому приближению[10].

Систему уравнений проходится сводить к одному уравнению и решать через функцию root в том случае, если задействовано программирование в среде Mathcad (см. этюд 6). Дело в том, что ключевое слово Given не «запихивается» в программы.

Мы знаем, что если система алгебраических уравнений линейна, то ее лучше решать не конструкцией Given-Find, а с помощью функции lsolve (сравните рис. 1.6 и 1.7). Подобная конкретизация наблюдается и при решении одиночных алгебраических уравнений. Если левая (ненулевая) часть уравнения – это полином n-й степени, то для поиска его корней (всех, включая и комплексные) предназначена встроенная функция polyroots. Ее работа показана на рис. 1.11.

Рис. 1.11. Поиск корней полинома

Функция polyroots (корни полинома) не требует начального приближения, а в качестве аргумента имеет вектор коэффициентов[11] (они могут быть и комплексными): нулевой элемент вектора ¾ это свободный член, первый¾ коэффициент при x, второй ¾ при х2 и т.д.

На качество работы функции root влияет значение системной переменной TOL. На рис. 1.11 эта переменная по умолчанию была равна 10-3: мы не свели уравнение к тождеству 0 = 0, а сделали так, чтобы правая и левая части по модулю отличались не более чем на 10-3.

Между функциями Find и root наблюдается своеобразный спор. С одной стороны, Find позволяет искать корни как уравнений, так и систем. С этих позиций функция root

как бы не нужна. Но с другой стороны, конструкцию Given-Find невозможно вставить в Mathcad-программы (см. этюд 6). В программах, повторяем, приходится подстановками сводить систему к одному уравнению и использовать функцию root.


1.2. Задача о балке, или Вариации на тему русской пословицы

Лучше один раз увидеть [протокол решения задачи], чем сто раз услышать [о возможностях пакета] – следуя такому «расширению» пословицы, рассмотрим решение в среде Mathcad классической задачи теоретической механики из раздела «Статика» – задачи о равновесии балки.

Рис. 1.12. Схема балки

Лучше один раз увидеть [схему задачи], чем сто раз услышать [ее условие] – такое «расширение» той же пословицы можно отнести ко всем прикладным программам, работающим под управлением операционной системы Windows, которую не зря называют графической оболочкой. Пакет Mathcad в этом смысле – не исключение. Работая в среде Windows, можно с помощью графического редактора Paintbrush (или какого-то другого) нарисовать схему задачи, а потом через буфер обмена ClipBoard перенести рисунок в окно Mathcad, что и было сделано (рис. 1.12). Если теперь в среде Mathcad подвести к рисунку курсор мыши и два раза щелкнуть по ее левой кнопке, то обрамление рисунка сразу изменится – рисунок перенесется в среду Paintbrush, где его можно доработать, а потом опять вернуть в Mathcad.

В Mathcad-документ можно вставить различные символы из стандартного набора Windows, украшая тем самым задачу (см., например, указательный палец на рис. 6.49 и 6.50). Из этого набора можно подбирать символы и для формирования пользовательских операторов.

Вопреки пословице все же скажем о задаче несколько слов: «Имеется балка, шарнирно закрепленная у левого своего края. В середине она подперта катком. Каток отличается от шарнира тем, что его реакция строго перпендикулярна балке. Справа на балке подвешен груз. Спрашивается: чему равны реакции опор x, y и P, если известен груз G и задана геометрия балки (плечи a, b и угол наклона a[12])?»

Все это словесное описание задачи можно внести в Mathcad-документ ремарками (комментариями), которые подобны ремаркам в тексте пьесы: действующие лица их не произносят, но они помогают лучше понять мысли автора. Пакет Mathcad оборудован текстовым процессором, позволяющим оформить, например, научную статью, не прибегая к специализированным средствам (текстовые процессоры Word, «Лексикон», ChiWriter, Scientific Word и др.). Кроме т ого, буфер обмена ClipBoard поможет перенести фрагменты Mathcad-документа в Word-документ и там дооформить их[13]. Автор хотел написать всю эту книгу в среде Mathcad, но потом от этой идеи отказался из-за проблем макетирования книги.

Итак, решаем задачу о балке. Но сначала два анекдота.

Диалог в учительской:

Преподаватель Закона Божьего, обращаясь к физику: Сегодня ваш любимчик двойку получил. Спросил я его, что такое Божественная Сила. Так он мне ответил, что это произведение Божественной Массы на Божественное Ускорение.

Физик: Я ему и по физике двойку поставлю. Ведь произведение Божественной Массы на Божественное Ускорение дает Силу с Божественностью в квадрате, а не в первой степени.

Диалог на экзамене:

Преподаватель: Что такое лошадиная сила?

Студент: Это сила, которую развивает лошадь ростом в один метр и весом в один килограмм.

Преподаватель: Да где ж вы такую лошадь видели?!

Студент: А ее так просто не увидишь. Она хранится в Париже, в Палате мер и весов.

Решение любой задачи в любой программной среде, как правило, начинается с ввода исходных данных. Но в нашей задаче о балке присутствует особенность, позволяющая называть Mathcad не просто математическим, а физико-математическим пакетом. Решая физическую задачу (школьную задачу по физике, например), мы часто путаемся не в формулах (все гениальные формулы, описывающие основы мироздания, просты – F=a×m, E=m×c2 и т.д.) и не в расчетах (под рукой персональный компьютер или, на худой конец, калькулятор), а в размерностях. Мало того, что есть различные системы измерений (футы-метры) ¾ в рамках одной системы нет полного единообразия (метры-миллиметры, футы-дюймы и т.д. – см. приложение 7).

Работая с языком BASIC (или с каким-то другим), вводя переменные и задавая им определенный тип, программист больше заботится не о физике решаемой задачи, а о... памяти машины. Тип числовой переменной с точки зрения программиста-прикладника – это атавизм тех времен, когда память машины была одним из лимитирующих факторов при решении задачи: вещественная переменная (8 знаков в мантиссе) занимает вдвое больше места, чем целочисленная, вещественная переменная двойной точности (16 знаков в мантиссе) ¾ вдвое больше, чем вещественная переменная одинарной точности и т.д. Пакет Mathcad в этом отношении расточителен – он присваивает всем числовым переменным двойную точность с 15 знаками в мантиссе. Эти переменные предстают перед глазами пользователя либо в целочисленном (17, например), либо в вещественном (3.14, 107), либо в комплексном (1.84 + 2.2 i) виде[14]. Но через знак «:=» в среде Mathcad можно присвоить переменной не только конкретную величину (20, 1, 2, 30 – математика задачи), но и размерность (ньютон, метр, угловой градус – физика задачи). Что-то подобное есть и в языке BASIC, когда числовая переменная «заглатывает» и свое значение, и свой тип: A = 20%, B = 1&, C = 2.2!, D = 3.3# и Е = 4.4@, опираясь на суффиксы % (простая целочисленная), & (длинная целочисленная), ! (простая вещественная; этот символ обычно опускают, руководствуясь принципом умолчания), # (двойная вещественная) и @ (сверхдлинная целочисленная). Для присваивания величине размерности за ней ставится знак умножения (его можно и не ставить) и вводится название соответствующей размерности (этим мы «баловались» на рис. 1.4). А можно поступить по-другому – нажать на панели часто используемых команд (см. рис. 1.2) кнопку с изображением мерной кружки. После этого на дисплее появится окно со списками физических величин (длина, время, скорость и т.д.) с соответствующими им размерностями (метр, секунда, километр в час и т.д. – см. приложение 6), одну из которых можно вставить в Mathcad-документ.

Рис. 1.13. Мастер размерностей Mathcad

На рис. 1.13 показано, как переменной P присваивается не просто число 20, а двадцать атмосфер. Если потом переменная распечатывается, то по умолчанию выдается «первородная» размерность, которую можно заменить на другую. По умолчанию Mathcad (европейская версия) ориентирован на СИ (SI ¾ Международная система единиц) – см. закладку Unit System в окне Math Options на рис. 1.13. Если это умолчание нарушить и перейти к другой системе (CGS – сантиметр-грамм-секунда или U.S. – британская), то будет и другой ответ, и, естественно, другая размерность давления (см. рис. 1.13). Можно вообще отказаться от конкретных названий единиц и оперировать самими названиями физических величин – см. переключатель Display Dimensions. Названия физических величин при этом можно поменять с английских на национальные: Mass – масса, Length – длина, Time – время и т.д.

В расчете возможны и пользовательские единицы измерения, отсутствующие в списке встроенных:

В среде Mathcad есть атмосфера физическая (atm), но нет атмосферы технической. Фрагмент Mathcad-документа, приведенный выше, исправляет этот недостаток. Кроме того, ради однообразия целесообразно переименовать атмосферы физические. По умолчанию оператор «=» выводит «главную» в системе СИ размерность давления – паскали (Pa), но пользователь может заменить их на другие, в том числе и на пользовательские, введенные ранее.

Можно ввести в расчеты величины, не относящиеся к физическим и отсутствующие в списке встроенных. Мы уже пытались это сделать – см. рис. 1.4. Давайте вернемся к задаче Удодова из рассказа Чехова «Репетитор» и еще раз решим ее в среде Mathcad с новыми условиями:

Купец купил 138 аршин черного и синего сукна, заплатив 250 тысяч старых рублей, 50 новых (деноминированных) и 12 долларов США. Спрашивается, сколько аршин купил он того и другого, если синее (импортное) стоило 25 центов за аршин, а черное (отечественное) ¾ 3 руб.?

Рис. 1.14. Римейк задачи о купце и сукне

Задача вполне реальная: в 1998 году, когда писалась эта книга, к привычным российскому потребителю рублям и долларам добавились деноминированные рубли, сильно усложнившие расчеты[15], подведение балансов и т.д. Двадцать рублей за доллар США ¾ это курс, по которому автор купил себе новый компьютер[16], на котором писалась эта книга.

В среде Mathcad можно сделать ссылку (Reference) на сайт в Internet, где хранятся текущие курсы валют. Тогда наша задача будет совсем реальной.

Пакет Mathcad – это прекрасный автоматизированный справочник, куда следует обращаться не только при решении задач, но и при чтении художественной литературы. Вот отрывок из романа Агаты Кристи «Убийство в Месопотамии»: «Начнем с того, что его рост, на мой взгляд, не превышал пяти футов и пяти дюймов». У Гаршина мы читаем: «Стоял прекрасный июльский день. Прекрасный потому, что было двадцать восемь градусов по Реомюру». А вот другой пример: «От горшка два вершка» – это много или как?! Мы, конечно, понимаем, что это скорее поэтическая, чем метрическая формула. Тем не менее:

Единицы измерения в среде Mathcad – это своеобразные встроенные символы, к которым применяются простейшие символьные преобразования (о них разговор еще впереди – в этюде 7).

В.М.Гаршин

То, чего не было

В один прекрасный июньский день, – а прекрасный он был потому, что было двадцать восемь градусов по Реомюру…

К константе, выводимой оператором «=», можно добавлять не только название физической величины, но и любую другую переменную, определенную к этому моменту. Вот забавная иллюстрация этого приема: в мультфильме «Тридцать восемь попугаев» Удава измеряют Попугаем, Мартышкой и Слоном. Если задать (подобрать) размеры животных, то Удав «укладывается» в 38 попугаев и еще одно попугайское крылышко, в 5 Мартышек и в 2 Слона. «А в попугаях-то я гораздо длиннее!»:

Но к числовым константам обычно добавляют какие-либо математические константы: e, π и др.

Вернемся к задаче о балке. Она сводится к решению системы трех алгебраических уравнений, описывающих равновесия по осям x и y, а также баланс моментов сил[17] вокруг шарнира. Конструкция Given-Find (дано ¾ найти) использует расчетную методику, основанную на поиске корня вблизи точки начального приближения, заданной пользователем.

Рис. 1.15. Задача о балке: решение I

Глядя на рис. 1.12, можно написать требуемую систему уравнений, «зажав» ее между ключевым словом Given и функцией Find (рис. 1.15). Функция Find возвращает значения переменных, превращающих вышеперечисленные (до слова Given) уравнения в тождества. Если уравнений более одного, то возвращаемые значения размещаются в векторе – в группе переменных, «зажатых в кулак». Но этот «кулак», как мы уже отмечали, легко разжать, выведя на дисплей найденные значения с любой доступной размерностью силы. Но не только этим хороша размерность в задачах. Главное то, что она позволяет автоматически отслеживать «физические» ошибки. Если, к примеру, пользователь сложит секунды с метрами, то Mathcad «заругается» и выдаст протестующее сообщение об ошибке: несовместимые единицы измерения – см. рис. 6.15, заставляющее вспомнить байки о том, как физик подколол лирика (батюшку), а студент озадачил преподавателя (см. выше).

В пункте 0 на рис. 1.15 введены пользовательские единицы измерений физических величин, связанные со встроенными.

Элегантность и простота решения системы уравнений в среде Mathcad, не требующая кодирования алгоритма или поиска соответствующей внешней процедуры, имеет и обратную сторону: у пользователя возникают естественные сомнения в правильности решения. Доверяй, но проверяй! – таким лозунгом можно прокомментировать три нижних выражения на рис. 1.15. Протестировать нужно не только компьютер, но и пользователя: правильно ли он составил исходную систему? Для этого проверяется баланс сил и моментов сил относительно другой системы координат: ось P, ось балки и момент сил вокруг катка. Все верно, идем дальше. Но сначала небольшое отступление.

Из пакета Mathcad в традиционные языки программирования может перекочевать прием, которого им так не хватает. Это задание переменным не только определенного типа (Integer, Long и т.д.), но и размерности: ньютонов, метров, угловых градусов и т.д. Такое расширение понятия переменной позволит оператору Print (если иметь в виду BASIC) выдавать на дисплей ее значение с соответствующей размерностью. Кроме того, вводом размерности можно, как и в среде Mathcad, контролировать правильность написания выражений. Контроль типа переменной в той или иной степени ведется во всех языках программирования. Некоторые версии языка BASIC запрещают писать оператор присвоения Sgn_A! = Dbl_B# + Lng_C&. В последних версиях такого ограничения уже нет. Более того, в Visual Basic введен тип переменных Variant, позволяющий перемешивать даже числовые и литерные переменные: A = "123" + 123, и никакой ошибки.

Ввод размерности в ряде случаев может и должен избавить программиста-прикладника от задания типа переменной. Пусть компилятор сам разбирается, сколько памяти ему отводить под хранение, например, значения угла с принятой в научно-технических расчетах точностью. Число байт под хранение физической величины, как правило, одно и тоже, если использовать «уравнивающие» множители милли, кило, Гига и т.д. В языке BASIC есть зачатки такого автоматического управления памятью компьютера – вспомним цепочку присвоений, когда переменные захватывают и свое значение, и размер памяти, отводимый под их хранение: A = 20%, B = 1&, C = 2.2!, D = 3.3# и Е = 4.4@. В языке программирования, встроенном в Mathcad (см. этюд 6), возможно присваивание переменным размерности (рис. 6.15).

Но нужно помнить, что более-менее сложная система нелинейных уравнений окажется не по зубам не только пакету Mathcad, но и другим мощным пакетам – Mathematica, Maple, Gauss и др. Пакет Mathcad в такой ситуации выдаст сообщение Did not find solution (Решение не найдено), заставляя пользователя поневоле переходить к полуавтоматическому режиму – менять значения начального приближения и (или) величину точности TOL (TOLerance – точность, погрешность), а также метод поиска решения (Mathcad 8) – рис. 1.8. Функция Find решает систему так, чтобы левые и правые части входящих в нее уравнений отличались на величину, не превышающую значения TOL[18]. Это предопределенная (системная) переменная среды Mathcad, хранящая по умолчанию значение 0.001, которое можно изменить, записав в Mathcad-документе выражение TOL:=0.0000001, например. Но и это часто не помогает. В коллекции автора (химика по специальности) есть Mathcad-задача поиска значения pH (водородного показателя) буферного водного раствора, сводящаяся к решению системы из восьми нелинейных алгебраических уравнений. Так вот, только при строго определенных начальных условиях пакет Mathcad находит правильное решение. Шаг влево, шаг вправо – расстрел: малейший отход от начальных условий, и слово Find «обливается кровью» и появляется соответствующее сообщение об ошибке. Но эта же задача в неограниченном диапазоне исходных данных прекрасно решается последовательными приближениями с поиском в цикле корня одного-единственного уравнения. Отход от лобовой атаки (от использования конструкции Given-Find) возможен лишь в том случае, если система уравнений не абстрактная, какие обычно приводятся в задачниках по математике, а реальная, отображающая конкретную прикладную (физическую, химическую, биологическую и т.д.) задачу. Кроме того, прикладник (физик, химик, биолог и т.д.), решая задачу, может сделать разумные допущения, линеаризирующие, например, некоторые выражения или уменьшающие их число. Другое важное преимущество метода последовательных приближений состоит в том, что прикладник, зная физику задачи, может менять точность расчетов при обработке выражений, входящих в систему. В блоке же Given-Find, как было уже отмечено, это недопустимо. В нем можно лишь смягчить эту проблему с другого конца – ввести в выражения балластные (нормирующие) коэффициенты, уравнивающие их по отношению друг к другу и позволяющие им решаться с одной точностью. А это опять же потеря физики в угоду математике. Но тем не менее все перечисленные ухищрения часто остаются тщетными из-за того, что система просто... не имеет решения, да и вся задача ориентирована не на поиск корней, а на минимизацию некоторых величин. В этом случае функция Find заменяется на функцию Minerr (MINimal ERRor). С помощью блока Given-Minerr можно решать обширный класс оптимизационных задач, о чем мы еще поговорим в этюдах 2 и 3.

А вот еще одна перефразировка: на компьютер надейся, а сам не плошай! В том смысле не плошай, что немного подумай и подскажи компьютеру, как быстрее и точнее решить задачу. Высший компьютерный «пилотаж» помогает пользователю обходить неизбежные ошибки и неточности программной среды.

Более глубокий анализ равновесия балки позволяет описать его системой линейных алгебраических уравнений. А для решения такой задачи в пакете Mathcad есть особые инструменты – операторы и функции работы с матрицами и векторами, которые уже были использованы нами при решении задачи о купце и сукне (см. рис. 1.7). Но, решая задачу о балке поиском корня системы линейных алгебраических уравнений с коэффициентами при неизвестных, хранящихся в квадратной матрице A (см. рис. 1.16), и со свободными членами, хранящимися в векторе B, от единиц измерения приходится отказываться (пункт 1). Это потому, что элементы матриц и векторов в среде Mathcad должны либо иметь одинаковую размерность, либо быть безразмерными. А это не просто ошибка пакета, а общая методологическая ошибка: элементы матрицы должны иметь разнородные размерности.

Матрица и вектор пакета Mathcad имеют «родственников» на языке BASIC – двухмерный и одномерный массивы (см. рис. 1.7). Массив же – это объединение сугубо однотипных величин. Разнотипные переменные объединяются в запись. Массив, образно говоря, – это бутылки в ящике, а запись – бутылки в баре. Чтобы примирить физику с математикой, достаточно разрешить в столбцах матрицы помещать величины с разнородными единицами измерений, считая матрицу не только двухмерным массивом простых переменных, но и одномерным массивом векторов. В записи (в векторе) могут, конечно, храниться и однотипные переменные – переменные с одной размерностью или вообще лишенные ее. Аналог одномерного массива в Mathcad – это матрица с одной строкой (вектор-строка). Но такая «горизонтальная» матрица не выражается через переменную с нижним индексом. Переменная с индексом – это нормальный, «вертикальный» вектор (вектор-столбец). Если допустить, что матрица – собрание (множество) величин с различной размерностью, то тогда придется все матричные операторы и функции разделить на группы по отношению к единицам измерений. Так, функции min (поиск минимального элемента в массиве) и max (поиск максимального элемента в массиве) не могут допустить неодинаковых размерностей в элементах матрицы-аргумента. Оператор же определения детерминанта должен преобразовывать матрицу как массив векторов. Величины в строках здесь должны быть одной размерности.

Рис. 1.16. Задача о балке: решение II

С точки зрения математика (несмотря на отсутствие размерности, что влечет за собой смысловую потерю физики задачи) решение в среде Mathcad системы линейных алгебраических уравнений через матрицы (см. пункт 4 на рис. 1.16) более удобно, чем через блок Given-Find (рис. 1.15): отпадает необходимость в начальном приближении (у линейной системы не более одного корня-вектора). Кроме того, матричное решение задачи, как правило, точнее (сравните пункты 5 на рис. 1.15 и 1.16): равновесие по оси P на рис. 1.16 имеет абсолютную точность.

Есть и другие причины, по которым приходится отказываться от размерностей. Международная система единиц (СИ) базируется на семи основных единицах (длина – метр, масса – килограмм, время – секунда, сила электрического тока – ампер, термодинамическая температура – кельвин, сила света – кандела и количество вещества – моль). Нам для решения простейшей задачи с размерностями на рис. 1.14 пришлось вводить дополнительную размерность (руб), воспользовавшись тем, что в данном расчете нет ссылки на время (принцип «Время ¾ деньги»). Это один из примеров того, почему с единицами измерений при работе в среде Mathcad часто приходится расставаться. Вина здесь не только фирмы MathSoft, но и всей теории размерностей. Дело в том, что эта теория какая-то незаконченная: недаром математические справочники избегают ее освещения. В физических же справочниках, когда дело доходит до размерностей, теряется всякая логика. Из-за этого многие научные дисциплины стараются избавиться от пут размерностей, вводя безразмерные величины (критерии): число Рейнольдса, например, если вспомнить аэродинамику. Освобождение от размерностей подкреплено целой теорией ¾ теорией подобия. Все это не могло не отразиться на развитии пакета Mathcad: упомянутая семерка размерностей (масса, длина, время, заряд, температура, сила света и количество вещества) неудобоварима в психологическом и даже в парапсихологическом смысле. Сама по себе размерность – понятие скользкое, опирающееся не только на науку, но и на привычки людей, законы искусства и даже на постулаты религии[19]. Стоит только вспомнить попытки заменить в метеосводках миллиметры ртутного столба на гектопаскали. Парапсихологический, если так можно выразиться, аспект проблемы размерностей в среде Mathcad выражается в том, что размерность там должна быть не та, которая заложена в Международную систему и в Mathcad 7 и 8.

Семь – число совершенное и в науке, и в искусстве, и в религии: стоит только вспомнить цвета радуги, ноты музыкальной гаммы, дни недели, чудеса света, наиболее промышленно развитые страны мира, античных мудрецов, смертные грехи... В классическом варианте языка BASIC имеется семь структурных управляющих конструкций алгоритма (цикл с предпроверкой, цикл с постпроверкой, цикл с выходом из середины, альтернатива, функция, процедура и множественное ветвление) и семь типов переменных (Integer, Long Integer, Single-precision Floating Point, Double-precision Floating Point, Currency, String и Туре – тип, заданный пользователем). Да и сама цифровая вычислительная техника базируется не на числе 8 (байт), как принято считать, а на числе 7. Два (бита) в степени восемь (256) – это число символов в ASCII-таблице. Но ASCII-таблица ни машиной, ни человеком никогда не воспринимается как единое целое, а всегда разбивается на две половины – верхнюю и нижнюю по 128 знаков в каждой. А это два в степени семь, а не восемь:

Тьмы низких истин нам дороже

Нас возвышающий обман.

А. Пушкин

В Международной системе семь единиц не потому, что это правильно, а потому, что это красиво.

Еще одна базовая размерность лежит на поверхности, но почему-то напрочь отвергается учеными. Это единица измерения стоимости – рубли, доллары, марки и т.д. (см. рис. 1.4 и 1.14). Тот же физик (вспомним два анекдота) может сказать: У меня в кабинете лежит книга массой в один килограмм, толщиной в один сантиметр и ценой в тысячу рублей, но в физико-математические дисциплины и пакеты единица измерения стоимости никогда не будет введена. Из-за этого в среде Mathcad экономические расчеты лишены размерности (в Mathcad-документах на рис. 1.4 и 1.14 мы этот недостаток попытались обойти). Кстати, в язык BASIC размерность валюты введена косвенно через новый тип числовых переменных – Currency.

Можно предположить, что еще какая-то базовая размерность, объединяющая килограммы, метры, секунды, кулоны (амперы) и градусы Кельвина с чисто эмпирическими (кандела) или счетными (моль) единицами, пока неведома нам, но зарезервирована Создателем (Господом Богом или Природой – кто как для себя считает) для измерения биополей, например, или чего-то другого, относящегося к областям экстрасенсорики, телепатии, телекинеза и прочей чертовщины. Говорят, что в Солнечной системе более десяти планет. Где-то там, за солнечной «околицей», описывает свою дугу неведомая планета, о существовании которой мы можем судить только по вносимым ею возмущениям в траектории движения Нептуна или Плутона. Так и седьмая гипотетическая основная единица измерения, витая в областях, пока недоступных научному анализу, вносит психологические (парапсихологические) возмущения в теорию размерностей. Это не могло не отразиться на пакете Mathcad, пользователи которого, «наигравшись» с размерностями, в конце концов от них отказываются не только по психологическим причинам (вводим радианы или градусы, например, а угол все равно остается безразмерным), но и из-за фактических ошибок, вину за которые нельзя возложить только на разработчиков пакета Mathcad, если принять во внимание «парапсихологические возмущения».

1.3. Великолепная семерка Mathcad

Раз уж мы залезли в мистику (в описание магических свойств числа семь), то подошла пора рассказа о великолепной семерке Mathcad – о семи видах графиков, используемых для визуального отображения различных зависимостей. Типов графиков в Mathcad, конечно, намного больше, но на панели инструментов имеется ровно семь кнопок для создания семи типов графиков. Мистика, да и только.

Графики очень помогают решать поставленные задачи. На рис. 1.8, например, начальные приближения к корню системы брались вблизи точек пересечения линий на графике. Глядя на выражение, можно узреть там корни, минимумы, максимумы и прочие интересные точки, только обладая сильно извращенным математикой воображением. На графике же все видно как на ладони.

К сожалению, графики, помещенные в книге, черно-белые. Их можно было бы расцветить, как это имеет место на экране дисплея, но цена книги от этого резко увеличилась бы. А ведь она адресована студентам и инженерам (см. название). Сейчас автор пишет книгу под условным названием «Mathcad для «новых» русских» с цветными иллюстрациями. Есть уже первые задачи для нее – задача о купце и сукне (см. рис. 1.14), задача о качестве менеджера (рис. 4.6 и 4.17) и задача о финансовой пирамиде (рис. 5.4) и др.

Но вернемся к графике.

Если нажать соответствующую кнопку панели инструментов (см. рис. 1.2 и 1.3), то раскроется панель графики с девятью новыми кнопками (см. рис. 1.17).

Нажимая на них, можно построить семь типов графиков. Сделаем это для иллюстрации решения задачи о балке, схема которой помещена на рис. 1.12.

На рис. 1.17-1.19 и 1.21-1.25 графически отображены реакции опор балки в зависимости от угла ее наклона при фиксированных других параметрах. Функциональные зависимости x, y и P (реакции опор – см. пункт 2 на рис. 1.17, пункт 5 на рис. 1.20, пункт 8 на рис. 1.24 и пункт 9 на рис. 1.25) взяты из главы 7, где наша система, описывающая равновесие балки, решается аналитически (см. рис. 7.9).

Рис. 1.17. Декартов график (X-Y Plot)

На рис. 1.17 помещен самый распространенный график: декартов график ( – X-Y Plot), иллюстрирующий связи между двумя (одна кривая на графике) или несколькими (две или более кривых) векторами. На оси ординат графика можно было бы написать не a, а a, a, a, отмечая тем самым связь линий с парами векторов x-a, y-a и P-a. Но по умолчанию (которое нередко находится в противоречии с пониманием) мы пишем только одну букву a.

Первый вектор[20] (у нас это значение угла наклона балки a) будет аргументом. Второй, третий и последующие векторы (реакции опор x, y и P) могут в явном виде и не присутствовать – их значения вычисляются через функциональные зависимости пункта 2 на рис. 1.17 во время построения графика. Повторяем ¾ на оси аргумента графика на рис. 1.17, если быть до конца педантичным, следует писать a, a, a, помечая тем самым пары векторов, отображаемых на графике.

Декартов график строится, как правило, в три шага:

·        шаг 1: задание вида функций одной переменной; они у нас уже есть – x(a), y(a) и P(a);

·        шаг 2: формирование вектора значений аргумента; у нас он меняется от нуля до 360 градусов с шагом 5 угловых градусов[21];

·        шаг 3: построение графика.

Третий шаг, в свою очередь, состоит опять же из трех шагов;

·        шаг 1: рисование на экране дисплея заготовки графика – прямоугольника с черными квадратиками у левой и нижней сторон; заготовка графика появляется в отмеченном курсором месте после того, как пользователь нажмет на одну из кнопок панели инструментов Graph или выберет соответствующую команду в меню Insert;

·        шаг 2: заполнение пользователем двух черных квадратиков заготовки графика («вакантных мест») именем функции (или вектора) и именем аргумента. Если функций больше одной, то их имена вводятся через запятую. В заготовке есть и другие черные квадратики, которые можно не заполнять. Среда Mathcad, например, сама рассчитает диапазон изменения Y. График появляется на дисплее после вывода курсора из зоны графика (автоматический режим расчетов) или после нажатия клавиши F9 (ручной или автоматический режим расчетов). Параметры графика задаются стандартными по умолчанию;

·        шаг 3 необходим, если параметры графика, установленные по умолчанию на предыдущем шаге, пользователя не устраивают и он хочет их изменить, вызвав соответствующее диалоговое окно (см. например, рис. 1.19 и рис. 3.12). Размеры графика изменяются обычной протяжкой, принятой в среде Windows.

В среде Mathcad 7 и 8 допустима быстрая (двухшаговая) технология построения графика (QuickPlot): пользователь набирает функцию (sin(x), например) и сразу отдает команду построения декартова или иного графика. Все! График будет построен с разбросом аргумента от минус 10 до плюс 10 и с пятьюдесятью точками внутри. Если это пользователя не устраивает, то график форматируется.

Рис. 1.18. Параметрический декартов график (продолжение рис. 1.17)

На рис. 1.18 показан так называемый параметрический декартов график – взаиморасположение двух векторов в зависимости от значения третьего параметра (у нас это угол наклона балки). В этом графике физический смысл узреть довольно сложно (влияние реакции катка, подпирающего балку, на x-реакцию шарнира, с помощью которого балка прикреплена к стене), но красота его бесспорна – подобно лемнискате Бернулли или бабочке для смокинга.

Рис. 1.19. Полярный график (Polar Plot – продолжение рис. 1.17)

Если аргумент представляет собой угол, изменяющийся от 0 до 360 градусов, а значения функции x(a), y(a) и P(a) имеют период, как в нашей задаче о балке, то ось аргумента декартова графика целесообразно «свернуть в круг» и получить полярный график ( – Polar Plot – рис. 1.19).

Рис. 1.20. Мастер трехмерных диаграмм Mathcad 8

На рис. 1.20 проиллюстрирована работа Мастера трехмерных диаграмм, введенного в Mathcad 8. Он существенно помогает строить графики и диаграммы, показанные ниже: пользователь по шагам строит график (кнопка «Далее»), откатываясь при необходимости назад («Назад»).

Рис. 1.21. График поверхности (Surface Plot – продолжение рис. 1.20)

На рис. 1.21 графически отображается функция уже не одного, а двух аргументов – правого плеча балки b и угла ее наклона. График поверхности (Surface Plot), как правило, строится не в три (см. выше), а в семь шагов (тоже красиво).

·        шаг 1: задание вида функций двух переменных; она у нас уже есть x(b, a) ¾ см. пункт 5 на рис. 1.20;

·        шаг 2: нумерация узлов сетки-поверхности по первому аргументу – i := 0.. 40;

·        шаг 3: формирование вектора первого аргумента – bi := -5 × м + 0.25 × м × j (м – это метры);

·        шаг 4: нумерация узлов сетки-поверхности по второму аргументу j := 0.. 40;

·        шаг 5: формирование вектора второго аргумента aj := 9 × ° × j (° – это угловые градусы);

·        шаг 6: заполнение матрицы (у нас она носит имя M) значениями функции x(b, a) в узлах сетки;

·        шаг 7: построение и форматирование графика поверхности.

Такая последовательность построения поверхности рекомендована в документации Mathcad. Но читатель может познакомиться и с другими, более удобными методиками: рис. 3.3 – задание координат углов сетки поверхности и рис. 3.4. – задание центра квадрата сетки.

Наша сетка (здесь она квадратная с количеством узлов 41 на 41) как бы превращается в гамак: – ее узлы поднимаются над нулевой отметкой пропорционально значению двухмерной функции. Форматирование графика сводится к вращению этого «гамака» относительно наблюдателя, к заливке ячеек разным цветом, к построению координатной сетки, к освещению этой ажурной конструкции из разных точек и др. Здесь особыми возможностями обладает Mathcad 8.

Рис. 1.22. Карта линий уровня (Contour Plot – продолжение рис. 1.20)

Очень часто, особенно при поиске оптимумов функции двух переменных (см. этюды 2 и 3), полезнее просмотреть не график поверхности (рис. 1.21), а карту линий уровня ( – Contour Plot – рис. 1.22), которые подобны линиям на физической географической карте, охватывающим горы и впадины (максимумы и минимумы). Если области графика залить цветом[22], то сходство с картой будет полное. В среде Mathcad 8 есть различные палитры раскраски трехмерных графиков: rainbow (радуга – самые верхние точки красные, а самые нижние – фиолетовые), topographic (топографическая – высшие точки белые, покрытые вечными снегами), gray (оттенки серого как в этой, увы, не цветной книге) и др.

Рис. 1.23. Векторное поле (Vector Field Plot – продолжение рис. 1.20)

Вместо линий графика на рис. 1.22 можно поставить маленькие стрелочки, отмечающие направление изменения функции двух переменных. Тогда получится векторное поле ( – Vector Field Plot – рис. 1.23). Возвращаясь к географической карте, можно сказать, что маленькие векторы отмечают направления течения рек и ручьев[23]. Этот график очень полезен, например, при решении дифференциальных уравнений (см. этюд 5) – с его помощью довольно просто нарисовать семейство кривых – решений уравнения.

Рис. 1.24. Трехмерный точечный график (3D Scatter Plot)

Гибридом декартова графика (рис. 1.17 и 1.18) и графика поверхности (рис. 1.21) является так называемый трехмерный точечный график ( – 3D Scatter Plot – рис. 1.24). Его главное отличие от графиков, отображающих прямоугольные матрицы (рис. 1.21-1.23), состоит в том, что с его помощью можно изобразить пространственную взаимосвязь не двух, а трех векторов (x, y и P, например). С помощью трехмерного точечного графика можно визуализировать и матрицу.

Рис. 1.25. Трехмерная столбчатая диаграмма (3D Bar Chart)

Элементы матрицы (или вектора) можно уподобить столбикам, расставить их на плоской поверхности двух аргументов и получить трехмерную столбчатую диаграмму ( – 3D Bar Chart). На рис. 1.25 аргумент один. Подобный, но плоский график можно построить и в декартовых координатах (см. рис. 5.1).

О графических возможностях пакета Mathcad можно написать целую книгу (что входит в перспективные планы автора). Мы же отсылаем читателя к приложению 1, где перечислены некоторые команды настройки графиков. Видов графиков, как уже было отмечено, семь, а инструментов работы с ними – три. Первый инструмент – это форматирование графика. Объемные графики (вернее, псевдообъемные – видимость объема имитируется на все том же плоском дисплее) – это скорее способ украшения документов, а не средство научного анализа. Настоящая работа ведется с плоскими (двухмерными) графиками. Для них в среде Mathcad припасены два других инструмента: лупа (Zoom – рис. 1.26) и трассировка (Trace – рис. 1.27).

Рис. 1.26. Лупа (Zoom) графиков

Если человеку необходимо более подробно рассмотреть какой-либо объект, он берет в руки лупу ¾ она и изображена на одной из кнопок панели Graph (см. рис. 1.26). Нажав на эту кнопку, пользователь вызывает диалоговое окно X-Y Zoom с четырьмя полями и пятью кнопками. Протяжкой на рассматриваемом графике можно выделить прямоугольную область (см. рис. 1.26), отмеченную пунктиром. Координаты области отображаются в диалоговом окне X-Y Zoom. Нажатием кнопки Zoom эту выделенную область можно увеличить до размеров исходного графика ¾ и таким образом под лупой рассмотреть левый корень системы уравнений, решаемой на рис. 1.8. Можно все вернуть в исходное положение (кнопка Unzoom), выбрать новую область и раскрыть ее окончательно (Full View).

Рис. 1.27. Трассировка (Trace) графиков

На график можно посмотреть как бы через прицел снайперской винтовки, если нажать на последнюю, девятую кнопку графической панели (рис. 1.27), появится диалоговое окно X-Y Trace. Если после этого курсором мыши прощупывать кривую на графике, то появятся два волоска (crosshair), координаты пересечения которых отображаются в окне Trace. Эти координаты можно скопировать (CopyX и CopyY) в буфер обмена, а потом перенести в Mathcad-документ и использовать в качестве первого приближения при поиске корня системы уравнений.

Естественно, семь графиков далеко не всегда могут удовлетворить потребности и фантазию пользователя. Разработчики Mathcad не стали утяжелять пакет «экзотической» графикой, а создали новый пакет Axum, предназначенный для более тонкой и изощренной визуализации данных из среды Mathcad. Кроме того, данные из Mathcad-документа с помощью инструмента MathConnex (см. приложение 7) можно перенести в среду Excel или MatLab и там воспользоваться графическими возможностями этих пакетов.


1.4. Операторы и функции

В математике есть основополагающее понятие – соотношение: имеется два множества; каждому элементу первого множества соотносят элемент второго множества. Частным случаем такого соотношения является функция одного аргумента – каждому значению угла (первое множество) соответствует значение, например, синуса (второе множество), косинуса и т.д. Читатель средних лет тут сразу вспомнит знаменитые таблицы Брадиса с такими «множествами» углов, синусов, логарифмов и других нужных для расчетов данных. Естественно, Mathcad не хранит множество углов и множество соответствующих им синусов, а рассчитывает эту тригонометрическую функцию по определенному алгоритму. Насколько он точен и быстр – это второй вопрос.

Можно говорить о двух множествах чисел, одном множестве функций и еще об одном множестве переменных и о множестве значений определенного интеграла: каждой четверке элементов первых четырех множеств соответствует один элемент пятого множества. Здесь речь идет об операторе определенного интеграла с четырьмя операндами, который также есть в среде Mathcad.

Лет двадцать назад наметилось некое несоответствие в трактовке терминов «функция», «оператор» математиками и программистами[24].

Математик, читая эту книгу, может сделать абсолютно законный вывод, что автор не вполне понимает, что такое оператор и что такое функция. Более того, в самом программировании нет полного единства в определении этих основополагающих понятий. То, что мы называем оператором в среде Mathcad, в среде языка BASIC называется иначе, и наоборот. Так, в среде языка BASIC есть очень удобный оператор Swap(a, b), меняющий в переменных a и b их содержимое. Этот оператор ничего не возвращает и, следовательно, с точки зрения пользователя Mathcad не может называться оператором. С другой стороны, операторы и функции Mathcad сами по себе тоже могут ничего не возвращать, а просто находиться в Mathcad-документе и ждать, когда с ними что-нибудь сделают. Например, поместят в левый операнд оператора вывода числового значения. Вот тогда-то они начнут возвращать то, что записано в приложениях 2 и 3.

Будем считать, что термины «оператор» и «функция» программно-зависимы, и рассмотрим не их суть (об этом пусть спорят теоретики), а отличия друг от друга в среде Mathcad.

Вот тест на внимательность читателя: заметил ли он разницу в использовании тригонометрических функций sin и cos на рис. 1.15 и 1.16. На первом рисунке аргумент a заключен в скобки, а на втором – нет. На рис. 1.16 можно было бы написать более экзотически (по-арабски): a sin и a cos.

Дело в том, что вычисление синуса и косинуса на рис. 1.15 ведется через вызов функции, а на рис. 1.16 – через вызов оператора. Для компьютера нет никакой разницы между функцией и оператором: и в том и в другом случае все сводится к вызову соответствующей вычислительной процедуры. Разница важна для пользователя, который еще в школе на уроках математики привык, что сложение, например, – это оператор с двумя операндами: 2 + 5, а синус – функция с одним аргументом: sin(a). Но ничто не мешает нам складывать через вызов функции (встроенной или пользовательской):

сложить(a, b):= a + b

сложить(2, 5)=7,

а рассчитывать синус и косинус через вызов оператора – см. рис. 1.16.

Функции вводятся в документ, как правило, через нажатие соответствующих кнопок: «s», «i», «n», «(» и т.д. Но лучше для этого использовать «мастер функций» (рис. 1.28).

Рис. 1.28. Мастер функций Mathcad

Встроенные операторы вводятся через нажатие кнопок с их изображением – см. рис. 1.3.

Функции (встроенные и пользовательские) с одним или двумя аргументами можно вводить в Mathcad-документ через нажатие кнопок «fx», «xf», «xfy» и «xfy» (нижний ряд на панели Evaluation на рис. 1.3). При этом появляются заготовки постфиксного и префиксного операторов с одним операндом («fx» и «xf»первый из них и был задействован на рис. 1.16), инфиксного «xfy» и древовидного «xfy» операторов с двумя операндами. Древовидный вызов оператора хорошо проиллюстрирован на рис. 3.14 в этюде 3.

Встроенные операторы отличаются от встроенных функций (не только в среде Mathcad, но и в программировании), во-первых, тем, что функции все равны между собой, оператор же умножения «главнее» оператора сложения: 2+2*2 равно шести, а не восьми. Кроме того, в среде Mathcad встроенную функцию с одним или двумя аргументами можно непосредственно вызвать в виде оператора (a sin, например). Со встроенными операторами не все так просто. На рис 1.29 даны иллюстрации работы функций и операторов в среде Mathcad.

Рис. 1.29. Операторы и функции

Второе отличие функции от оператора в среде Mathcad в том, что оператор имеет фиксированное количество операндов: один (n! – факториал, например), два (сложение, вычитание, степень, дифференциал, неопределенный интеграл), три (сумма и произведение элементов вектора, производная высокого порядка и др.), четыре (сумма и произведение ряда, определенный интеграл (см. выше) и т.д.).

Некоторые же функции (Find, MinErr, Minimize, Maximize, например) способны иметь дело с переменным числом аргументов. Третье отличие функции от оператора в среде Mathcad в том, что встроенную функцию можно переопределить. Если, например, пользователя не устраивает то, что аргумент синуса должен быть в радианах, он может заставить синус «глотать» угловые градусы (рис. 1.29).

Внешне для пользователя функция отличается от оператора тем, что у функции есть имя (это обычно слово или сокращение слова), а у оператора – символ. Правда, некоторые операторы вообще не имеют ни имени, ни символа: xy (x в степени y) и Vi (i-й элемент вектора V). Функций-анонимов в среде Mathcad нет.

Пара операторов Mathcad может иметь один и тот же символ, но прописанный разным стилем: сравните светлое равно (вывод числового значения) и полужирное равно (булево равенство). В среде Mathcad можно оперировать одноименными переменными и функциями пользователя с различным шрифтом, с помощью которого отмечаются совершенно различные переменные и функции. Так, в расчете основные переменные можно прописать шрифтом размером 14, а вспомогательные – 10. Традиционные языки программирования такого «безобразия» не допускают.

Одна из причин популярности Mathcad заключается в том, что пользователь вправе вставлять в документы либо функцию, либо оператор в зависимости от того, к чему он привык, изучая математику в школе или в институте. Благодаря этому Mathcad-документ максимально похож на лист с математическими выкладками, написанными от руки или созданными в среде какого-либо текстового процессора (Scientific Word, ChiWriter и др.).

А вот вторая причина успеха. Традиционное программирование разводит во времени процесс решения задачи на три независимых этапа: программа пишется, затем отлаживается и оптимизируется. В среде Mathcad эти процессы слиты воедино: вводя новую формулу в документ, можно не только посмотреть результат вычислений по ней, но и построить график, создать анимационный клип и т.д.

В среде Mathcad 7 и 8 операторы «:=» (ввод значения) и «=» (вывод значения) несколько перепутались. Если пользователь забудет, что переменная А, например, не определена, и наберет на клавиатуре «A=», то оператор вывода «=» автоматически превратится в оператор присваивания «:=» (технология SmartOperator – сообразительный оператор). Вот хорошее правило: никогда не используйте оператор «:=» для ввода значения переменной. Для этого нужно использовать оператор «=». Это убережет от случайного переопределения «занятой» переменной – как пользовательской, так и встроенной. Переменная А, например, – это один ампер.

Создавая пользовательский оператор, ему можно давать не только имя, но и символ, незанятый встроенными операторами. В конце рис. 1.29 показана технология создания булевого оператора «примерно равно», доводящего до семи (опять семь!) список операторов сравнения вещественных величин («равно», «неравно», «больше», «меньше», «больше или равно» и «меньше или равно» – см. соответствующие кнопки на панели Evaluation на рис. 1.3 и 1.29). Символ «»» берется из таблицы символов Windows (Alt+0196) или из таблицы символов самого Mathcad (см. ниже), которая вызывается из Центра Ресурсов. Здесь это уже не общая переменная (с шрифтом Arial Cyr), а переменная первого пользователя (User1 со шрифтом Symbol). На рис. 1.15 по такой же технологии введена пользовательская единица измерений – угловой градус (°).


Кроме того, диалог пользователя с компьютером в средах Mathcad 7 и 8 обогащен текстовыми переменными. Для их поддержки введены «текстовые» функции. Их работа показана в пункте 1 на рис. 1.30.

Рис. 1.30. Работа текстовых функций

Между числовыми и текстовыми переменными нет глубокого водораздела. Это проиллюстрировано в пункте 2 на рис. 1.30, где моделируется бросание монетки: орел – это 1, а решка – это решка. Переменная a принимает то числовое, то текстовое значение. Об этом мы еще поговорим в этюде 6 (рис. 6.46 и 6.47). В связи с этим в среду Mathcad 8 введены специальные булевы функции, возвращающие 0 или 1 – в зависимости от типа аргумента (см. пункт 4 на рис. 1.30).



[1] Покойная матушка автора умела вычислять на счетах квадратный корень.

[2] На рисунках книги шрифт переменных и констант Arial Cyr (см. рис. 1.29), а шрифт комментариев – Times New Roman Cyr.

[3] Там может быть и оператор, например Vi или M<n>, локализующий элемент массива (V) или матрица (M), куда заносится соответствующее значение.

[4] Проблему русских имен переменных в среде Mathcad мы рассмотрим в главе 6 при раскладке пасьянса.

[5] Между Given и Find могут быть записаны и неравенства. Но об этом позже.

[6] Элементом вектора (матрицы) может быть новый вектор (матрица). В этом случае говорят о вложенном массиве (nested arrays).

[7] В математике принято говорить «элемент матрицы» и «компонента вектора», а не «элемент вектора». Но мы будем применять второй термин, так как в среде Mathcad нет принципиальной разницы между вектором и матрицей: вектор ¾ это матрица с одним столбцом.

[8] Если при создании матрицы нажимать не OK, а Insert, то окно работы с матрицами будет оставаться на экране дисплея.

[9] В разработке функций, предназначенных для решения алгебраических уравнений и систем (Find, MinErr и др.) принимала участие и фирма Frontline System, Inc. (см. конец приложения 1 с указанием авторских прав). Эта же фирма поставила Решатель (Solver) для электронных таблиц Excel.

[10] Это не совсем так, вернее совсем не так – см. начало этюда 3.

[11] Символьная математика Mathcad умеет не только выяснять, является ли выражение полиномом или нет, но и вычисляет коэффициенты полинома (см. этюд 7).

[12] В Mathcad-документ греческие буквы вставляются нажатием кнопок специальной панели (ab – см. рис. 1.3). Другой способ ввода греческих букв – аккорды: Ctrl + p дает π и т.д.

[13] В шестой версии Mathcad в меню File появилась команда Export Worksheet, существенно облегчающая эту работу. В седьмой и восьмой версиях этой функцией нагружена команда Save as... Кроме того, Mathcad-документ можно внедрить в Word-документ (и наоборот), используя технологию OLE. В среде Word, например, можно проверить орфографию и грамматику ремарок.

[14] В среде Mathcad 7 и 8 Pro допустимы не только числовые, но и текстовые переменные.

[15] А спрашивается, чего мучились ¾ инфляция опять ставит все на свои места. Кроме того, в 1999 году появилась новая «головная боль» ¾ евро.

[16] См. информацию в конце книги (рекламная пауза).

[17] Произведение силы на длину плеча приложения.

[18] В среде Mathcad 8 уже две системные переменные, влияющие на точность расчета: привычная TOL и новая CTOL.

[19] Гражданская война в Швейцарии в 1847 г. разгорелась на религиозно-метрической почве. Семь кантонов (Зондербунд) боролись за свои собственные меры веса и длины. Кроме того, туда подмешался давний спор католиков с протестантами. Нельзя же, в самом деле, лить кровь только из-за «футов-метров». Религиозные войны – это войны за освобождение совести человека. Наша православная церковь все еще ждет своего Цвингли, Кальвина, Лютера…

[20] Вернее, зачаток вектора ¾ переменная области (Range Variable).

[21] По умолчанию задается не шаг, как на языке BASIC, а второе значение вектора. В нашем случае они совпадают.

[22] Читатель может сделать это вручную по технологии книжек «Раскрась сам».

[23] Это не совсем так, но уж больно удачно сравнение с ручьями и реками.

[24] Расхождение можно наблюдать в трактовке даже самых простых понятий. Так упоминавшиеся нами углы, которым соотносятся значения синуса, с точки зрения математика – это множество с бесконечным числом элементов. Для программистов же углы – это множество с сугубо конечным числом элементов. Если точность – одна десятая углового градуса (обычная точность технических расчетов), то множество углов в круге имеет всего лишь 3600 элементов. Реальное число в математике и реальное число конкретного языка программирования (тип real в языке Pascal или тип Single в языке BASIC)– это, как говорится, две большие разницы. Эта тенденция хорошо описана в книге Дж. Кемени, Дж. Снелла и Дж. Томпсона «Введение в конечную математику» (Издательство Иностранной литературы, 1963). Дж. Кемени, кстати, является одним из создателей языка BASIC.